const builditem_form = (data) => {
  let formitem_forms = ''
  data.fields?.forEach(item=>{
    if(item.formtype==='form'){
      formitem_forms += `
- 加入表单，${item.prompt}
    - 加入组件名称：Input
        name: 'compname'
        default-value: 'TestComp'
    - 嵌套表单字段：`

    }
  })

  console.log(formitem_forms);
  
  return formitem_forms
}

const buildFormSelect = (data) => {
  let formitem_selects = ''
  data.fields?.forEach(item=>{
    if(item.formtype==='select'){
      formitem_selects += `
- 加入选择框：Select组件
      options: ${item.prompt}
`
    }
  })

  console.log(formitem_selects);
  
  return formitem_selects

}

const buildFormButton = (data) => {
  let formitem_btns = ''
  data.fields?.forEach(item=>{
    if(item.formtype==='button'){
      formitem_btns += `
- 加入按钮：${item.name}
    - 按钮处理事件
${item.prompt}
`
    }
  })

  console.log(formitem_btns);
  
  return formitem_btns

}

const buildformOptData = (data) => {
    let formitem_opts = ''
    let formopt_data = {}
    data.fields?.forEach(item=>{
      formopt_data[item.name] = item.prompt
      if(item.formtype==='radio'){
        formitem_opts += `
- Radio:
    name: '${item.name}'
    label: '${item.label}'
    选项：[${item.prompt}]
`
      }
      else if(item.formtype==='input'){
        formitem_opts += `
- Input
    name: '${item.name}'
    label: '${item.label}'
`
      }
      else if(item.formtype==='textarea'){
        formitem_opts += `
- Textarea
    name: '${item.name}'
    label: '${item.label}'
`
      }


      
    })


    console.log('data:', data, 'formOptData', formopt_data);    
    console.log('formitem_opts:', formitem_opts);

    
    return [formitem_opts, formopt_data]
}

const promptCombineData = (template, data) => {
    let prompt = template;
    for (const key in data) {
        if (data.hasOwnProperty(key)) {
            const value = data[key];
            prompt = prompt.replace(new RegExp(`{${key}}`, 'g'), value);
        }
    }

  return prompt
}

const buildPrompt = (template, data) => {
    let formForm = builditem_form(data)
    let formSelect = buildFormSelect(data)

    let [formitem_opts, formOptData] = buildformOptData(data)
    let formitem_btns = buildFormButton(data)

    formitem_opts = formitem_opts.replace(/^/gm, '        ');
    data.formitem_prompt = formitem_btns + formSelect + formForm + formitem_opts

    let prompt = promptCombineData(template, data)

    console.log('prompt:', prompt);

    return prompt
}

export function promptCombine(template, data) {


  let compprompt = buildPrompt(template, data)

  $.copyToClipboard(compprompt)

  return

    let formitem_prompt = 
`- 加入按钮：kimi
    - 按钮处理事件：打开url:'https://www.kimi.com/'
- 加入按钮：deepseek
    - 按钮处理事件：打开url:'https://chat.deepseek.com/'
- 加入按钮：metaso
    - 按钮处理事件：打开url:'https://metaso.cn/'
- 加入按钮：nami
    - 按钮处理事件：打开url:'https://bot.n.cn/chathome'
- 加入按钮：qianwen
    - 按钮处理事件：打开url:'https://chat.qwen.ai/'
- 加入按钮：豆包
    - 按钮处理事件：打开url:'https://doubao.com/'
- 加入按钮：coze
    - 按钮处理事件：打开url:'https://www.coze.cn/'`

    let formitem_prompt_option = ''

    
    let formopt_data = {}
    data.fields?.forEach(item=>{
      if(item.buttontype==='txtop'){
        console.log('optitem:', item);
        formopt_data[item.buttontype] = item.prompt

      }

      
    })

    console.log('formopt_data:', formopt_data);


      // 第一循环处理按钮类型
      data.fields?.forEach(item => {
        // console.log('item:', item, item.buttontype);

        if (item.formtype === 'button') {
          formitem_prompt += `
- 加入按钮: ${item.name}`
          if(item.buttontype==='link'){
            formitem_prompt += `
  - 按钮处理事件：打开url:'${item.prompt}'`
          }
          else if(item.buttontype==='prompt'){
            formitem_prompt += `
    - 按钮处理事件：
        - 函数内部用模板字符串定义多行文本变量prompt,默认值设为:
'''
${item.prompt}
'''
      - 使用代码 $.copyToClipboard(prompt)复制prompt内容
`
          }
          else if(item.buttontype==='prompt_const'){
            let prompt_val = `常量${item.prompt}的值`
            // console.log('prompt_val:', prompt_val);

            formitem_prompt += `
    - 按钮处理事件：
        - 函数内部用模板字符串定义多行文本变量prompt,默认值设为:
'''
${prompt_val}
'''
      - 使用代码 $.copyToClipboard(prompt)复制prompt内容
`            
          }  
          else if(item.buttontype==='langGpt'){
            console.log(item);
            
            let langGpt_prompt = $.prompt_langGPT.replace('{goals}', item.prompt)


            formitem_prompt += `
      - 按钮处理事件：
        - 函数内部用模板字符串定义多行文本变量prompt,默认值设为:
'''
${langGpt_prompt}
'''
      - 使用代码 $.copyToClipboard(prompt)复制prompt内容
`
          }
          else if(item.buttontype==='txtop'){
            
            console.log('txtop:', item.prompt, formopt_data[item.buttontype]);

            let prompt_val = item.prompt

            //将prompt_val中的${item.prompt}替换为formopt_data[item.buttontype]
            prompt_val = prompt_val.replace(/{optxt}/g, formopt_data.txtop);

            console.log('prompt_val:', prompt_val);

            formitem_prompt += `
    - 按钮处理事件：
        - 函数内部用模板字符串定义多行文本变量prompt,默认值设为:
${prompt_val}
      - 使用代码 $.copyToClipboard(prompt)复制prompt内容
`
          }

        }
        else if (item.formtype === 'checkbox') {
          formitem_prompt_option += `
- 加入Checkbox
    name: ${item.name}
    options: ${item.prompt}
`;
        } else if (item.formtype === 'radio') {
          formitem_prompt_option += `
- 加入Radio
    name: ${item.name}
    options: ${item.prompt}
`;
        }        
      });

    formitem_prompt += '\n- 加入表单';
    formitem_prompt += formitem_prompt_option;


    data.formitem_prompt = formitem_prompt;

    let prompt = template;
    for (const key in data) {
        if (data.hasOwnProperty(key)) {
            const value = data[key];
            prompt = prompt.replace(new RegExp(`{${key}}`, 'g'), value);
        }
    }

    //控制台print
    console.log('promptCombine-formitem_prompt:', formitem_prompt);

    //控制台print prompt
    // console.log('promptCombine-prompt:', prompt);

    $.copyToClipboard(prompt);

    return prompt;
}

const renderTemplate = (str, data) => {
  // 使用正则 /{([^}]+)}/g 匹配所有 {key}
  return str.replace(/{([^}]+)}/g, (match, key) => {
    // 如果 data 中有该字段就替换，否则保留原占位符
    return data.hasOwnProperty(key) ? data[key] : match;
  });
}
export const buildPromptLangGpt = (data)=>{
  let template = $.prompt_langGPT

  const result = renderTemplate(template, data);
  console.log(template, result);

  
}